512px × 512pxで生成するのはなぜ?
最近のYouTubeの解像度は1920px × 1080px、普段絵を描く方は3000pxくらいで作業するかもしれませんが、画像生成ではみんな512px近辺で生成します。なぜでしょう?
主な理由は2つあります。
😭単純に計算量が多い
潜在空間に投影することで計算量を下げているとはいえ、それでもご家庭のパソコンで動かすにはギリギリです
ハードウェアの進歩とソフトウェアの最適化に期待です
解決策
一度に大きな画像を作らずに、小さな画像をタイル状にならべて大きくしようという手法
Stable Diffuisonとは別の技術で、ボケた写真をクリアにしたり解像度を上げるものがあります
生成した画像をアップスケーリングして、大きな画像を作ります
📝512px × 512pxでモデルを学習している
仮にスーパー性能の良いパソコンを手に入れたとしても、2000pxを超えるような画像はうまく生成できません
漫画家に体育館の壁いっぱいに絵を描いてくれ、と頼んだらおそらく漫画で描いているサイズのキャラをびっしり壁に描くでしょう
普段描いているサイズと違うので、壁一面にでっかくキャラを描こうとはならないんですね
それと同じことが画像生成AIでも起こります
解決策
漫画家に大きな絵を描いてもらうための工夫の一つです
まず手元の紙に描いてもらい、それを拡大コピーして壁に貼る
それを下書きにして描いてもらえばうまく描けるだろうというのがHires.fixです
余談 :
Stable Diffusion 1.5は512px × 512pxの正方形のみの画像で学習していました
しかし、縦長や横長の画像をなんでもかんでも正方形にトリミングしたので、例えば立っている人の写真であれば、頭や足が切れてしまいます
そこを工夫して画像を正方形だけではなく縦長や横長に画像を編集してデータセットにしたのがNovelAIDiffusionです
それだけでなく512pxから768pxへ少し大きなサイズでデータセットを作りました
NAIリークに関係なく、最近のStable Diffuison 1.5ベースのモデルはこの考えでファインチューニングされていることが多いため、512px × 768pxのようなサイズまでは綺麗に生成できます
この特性を利用して、大きい画像から小さい画像まであらゆる解像度の画像でファインチューニングすれば、どんな解像度でも対応できるんじゃね?という考えで作られたLoRAもあります
SDXLの話
SDXLではさらに進んで1024px、もちろん正方形以外のアスペクト比でも学習されています